package com.boot3.controller;

import com.boot3.entity.Emp;
import com.boot3.entity.Result;
import com.boot3.service.EmpService;
import com.boot3.service.impl.EmpServiceImpl;
import com.boot3.service.impl.EmpServiceImpl001;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

/**
 * @author wzm
 * @create 2024-02-28 9:34
 * project_name:JavaWeb2401
 * @Description
 */

/*
* IOC：控制反转，对象从程序员new转为由外部容器创建和管理
* DI:依赖注入，当项目运行时，需要的对象会从容器中获取，称为依赖注入
* 容器：Spring提供 也叫IOC容器或Spring容器
* 容器中管理的对象叫做bean对象
*思考：
*  如何完成控制反转  如何完成依赖注入
*
*
*
* */
//EmpController控制器类  负责处理请求调用底层功能完成业务逻辑 返回结果
//@RestController
    @Controller
    @ResponseBody
public class EmpController {


    //上调下
    //@Qualifier("empServiceImpl") //指定注入哪个bean（名字）
    //@Autowired //自动根据变量的类型注入需要的子类对象
    @Resource(name="empServiceImpl001")
    private EmpService empService;

    /*解决子类类型由多个的情况：
    * @Primary 注解  主要的 作用：让当前注解所在的对象的bean生效注入
    * @Qualifier 注解 和AutoWired一起使用 作用：指定注入的bean的名字
    * @Resource 注解 作用：指定注入的bean的名字
    *
    *
    * @AutoWrited和@Resource的区别
    * @AutoWrited 是Spring提供的注解  而@Resource是jdk提供的注解
    * @AutoWrited 默认按照类型注入   @Resource按照名称注入
    * */


    /**
     * 准备一个根据id查询员工的方法
     * @param id 路径参数id
     * @return 返回统一结果内容  将数据放入resutl的data属性中
     */
    @RequestMapping("/getEmp/{id}")
    public Result getById(@PathVariable Integer id){
        //获取参数
        //封装参数
        //调用service完成功能
        Emp emp = empService.findById(id);


        //判断并返回
        if(emp != null){
            return Result.success(emp);
        }else{
            return Result.error("未查询到指定信息");
        }


    }

}


